jQuery.extend(String.prototype, {
    isPositiveInteger:function(){
        return (new RegExp(/^[1-9]\d*$/).test(this));
    },
    isInteger:function(){
        return (new RegExp(/^\d+$/).test(this));
    },
    isNumber: function() {
        return (new RegExp(/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/).test(this));
    },
    isBlank:function(){
        return /^([\s]+)?$/.test(this);
    },
    trim:function(){
        return this.replace(/(^\s*)|(\s*$)|\r|\n/g, "");
    },
    trans:function() {
        return this.replace(/&lt;/g, '<').replace(/&gt;/g,'>').replace(/&quot;/g, '"');
    },
    replaceAll:function(os, ns) {
        return this.replace(new RegExp(os,"gm"),ns);
    },
    skipChar:function(ch) {
        if (!this || this.length===0) {return '';}
        if (this.charAt(0)===ch) {return this.substring(1).skipChar(ch);}
        return this;
    },

    /**
     * check if Valid password
     */
    isValidPwd:function() {
        return (new RegExp(/^([_]|[a-zA-Z0-9]){6,32}$/).test(this));
    },
    /**
     * check if Valid email
     */
    isValidMail:function(){
        return(new RegExp(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/).test(this.trim()));
    },

    isSpaces:function() {
        for(var i=0; i<this.length; i+=1) {
            var ch = this.charAt(i);
            if (ch!=' '&& ch!="\n" && ch!="\t" && ch!="\r") {return false;}
        }
        return true;
    },
    isPhone:function() {
        return (new RegExp(/^(13|15|17|18)\d{9}$/).test(this));
    },
    isURL:function(){
        return (new RegExp(/^[a-zA-z]+:\/\/(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$/).test(this));
    },
    format : function() {
        var args = arguments;
        return this.replace(/\{(\d+)\}/g,
            function (m, i) {
                return args[i];
            });
    },
    formatPlaceholder:function(params){
        if(this.isBlank()){
            return this ;
        }
        var matchers = this.match(/&{[\w\.]+}/g);
        if (matchers == null || matchers =="" || matchers == undefined){
            return this ;
        }
        var result = this ;
        for(i = 0 ; i < matchers.length ; i++){
            var m = matchers[i] ;
            var p  = m.replaceAll("&{","").replaceAll("}","");
            result = result.replaceAll(m,params[p]);
        }
        return result ;
    }
});

var Encrypt = {
    Base64:function(){
            // private property
            _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

            var encode = function (input) {
                var output = "";
                var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
                var i = 0;
                input = _utf8_encode(input);
                while (i < input.length) {
                    chr1 = input.charCodeAt(i++);
                    chr2 = input.charCodeAt(i++);
                    chr3 = input.charCodeAt(i++);
                    enc1 = chr1 >> 2;
                    enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
                    enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
                    enc4 = chr3 & 63;
                    if (isNaN(chr2)) {
                        enc3 = enc4 = 64;
                    } else if (isNaN(chr3)) {
                        enc4 = 64;
                    }
                    output = output +_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4);
                }
                return output;
            }

            // public method for decoding
            var decode = function (input) {
                var output = "";
                var chr1, chr2, chr3;
                var enc1, enc2, enc3, enc4;
                var i = 0;
                input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
                while (i < input.length) {
                    enc1 = _keyStr.indexOf(input.charAt(i++));
                    enc2 = _keyStr.indexOf(input.charAt(i++));
                    enc3 = _keyStr.indexOf(input.charAt(i++));
                    enc4 = _keyStr.indexOf(input.charAt(i++));
                    chr1 = (enc1 << 2) | (enc2 >> 4);
                    chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
                    chr3 = ((enc3 & 3) << 6) | enc4;
                    output = output + String.fromCharCode(chr1);
                    if (enc3 != 64) {
                        output = output + String.fromCharCode(chr2);
                    }
                    if (enc4 != 64) {
                        output = output + String.fromCharCode(chr3);
                    }
                }
                return _utf8_decode(output);
            }

            // private method for UTF-8 encoding
            _utf8_encode = function (string) {
                string = string.replace(/\r\n/g,"\n");
                var utftext = "";
                for (var n = 0; n < string.length; n++) {
                    var c = string.charCodeAt(n);
                    if (c < 128) {
                        utftext += String.fromCharCode(c);
                    } else if((c > 127) && (c < 2048)) {
                        utftext += String.fromCharCode((c >> 6) | 192);
                        utftext += String.fromCharCode((c & 63) | 128);
                    } else {
                        utftext += String.fromCharCode((c >> 12) | 224);
                        utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                        utftext += String.fromCharCode((c & 63) | 128);
                    }

                }
                return utftext;
            }

            // private method for UTF-8 decoding
            _utf8_decode = function (utftext) {
                var string = "";
                var i = 0;
                var c = c1 = c2 = 0;
                while ( i < utftext.length ) {
                    c = utftext.charCodeAt(i);
                    if (c < 128) {
                        string += String.fromCharCode(c);
                        i++;
                    } else if((c > 191) && (c < 224)) {
                        c2 = utftext.charCodeAt(i+1);
                        string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                        i += 2;
                    } else {
                        c2 = utftext.charCodeAt(i+1);
                        c3 = utftext.charCodeAt(i+2);
                        string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                        i += 3;
                    }
                }
                return string;
            }

            return {encode:encode ,decode:decode};
        },
    MD5:function(){

    }
} ;



var StringUtil = {};

jQuery.extend(StringUtil , {
    isEmpty: function (str){

        return str == undefined || str == null || str == "" ;
    } ,
    isNotEmpty:function (str){
        return !this.isEmpty(str) ;
    },
    isBlank : function (str){
        str = jQuery.trim(str)

        return isEmpty(str);
    },
    trimToEmpty:function (str){
        str = jQuery.trim(str);
        return str ;
    },
    nullToEmpty:function (str){

        return this.isEmpty(str)? "" : str;
    },
    nullToUndefined:function(){

        return this.isEmpty(str)? undefined : str;
    },
    randomString:function(){
        var ran = Math.random() ;
        ran  = ran.toString();

        if(ran.length > 3) {
            ran = ran.substring(3);
        }
        return ran ;
    }
});




